特定平台说明
以下是安装具有OpenMP支持的C / C ++编译器的说明,可为每个受到支持的平台安装scikit-learn的Cython扩展。
Windows
首先,安装Visual Studio 2019构建工具(Build Tools for Visual Studio 2019)。
警告:
您不需要安装Visual Studio2019。您仅需要安装“所有下载(All downloads)”->“ Visual Studio 2019工具(Tools for Visual Studio 2019)”下的“ Visual Studio 2019构建工具(Build Tools for Visual Studio 2019)”这一程序即可。
其次,确定您运行的是64位还是32位Python。build命令取决于Python解释器的体系结构。您可以通过在cmd
或powershell
控制台中运行以下命令来检查Python解析器的体系结构:
python -c "import struct; print(struct.calcsize('P') * 8)"
对于64位Python,可以使用以下命令构建和配置环境:
SET DISTUTILS_USE_SDK=1
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
如果是32位Python的话,把x64
更换为x86
。
请注意,上面的路径可能因用户而不同。上面的路径是要指向“ vcvarsall.bat”文件,该文件将在当前命令提示符窗口下设置必要的环境变量。
最后,输入以下命令来构建scikit-learn:
pip install --verbose --editable .
mac操作系统(OS)
mac操作系统(OS)上默认C编译器Apple clang(容易混淆的别名是 /usr/bin/gcc
)不直接支持OpenMP。我们提供了两种替代方法来开启OpenMP支持:
- 用conda 安装
conda-forge::compilers
; - 用Homebrew安装
libomp
以扩展默认的Apple clang编译器。
来自conda-forge的mac操作系统(OS) 编译器
如果使用conda包管理器(版本> = 4.7)的话,则可以在conda-forge中安装compilers
的元包(meta-package),conda-forge提供基于llvm工具链的由OpenMP启动的C / C ++编译器。
首先安装mac操作系统(OS)命令行工具:
xcode-select --install
建议使用专门的conda环境,从源代码开始构建scikit-learn:
conda create -n sklearn-dev python numpy scipy cython joblib pytest \
conda-forge::compilers conda-forge::llvm-openmp
conda activate sklearn-dev
make clean
pip install --verbose --editable .
注意:
如果收到任何依赖冲突的错误消息的话,请尝试注释掉$HOME/.condarc
文件中的任何自定义conda配置。特别是该指令channel_priority: strict
会导致此问题的出现。
您可以使用以下命令来检查在conda forge中是否已经正确安装自定义的编译器:
conda list compilers llvm-openmp
编译器元包(meta-package)将自动设置自定义环境变量:
echo $CC
echo $CXX
echo $CFLAGS
echo $CXXFLAGS
echo $LDFLAGS
这些自定义环境变量指向您的sklearn-dev
conda环境中的文件和文件夹(尤其是在bin/,include/和lib/路径下的子文件夹)。例如 -L/path/to/conda/envs/sklearn-dev/lib
应该包括在LDFLAGS
变量中。
在日志中,您应该可以看到正在由clang和clang++编译器构建的编译扩展程序。该编译器是由conda中的-fopenmp
命令行标志安装的。
来自Homebrew的mac操作系统(OS) 编译器
另一个解决方法是为mac操作系统(OS)上默认的clang编译器开启OpenMP支持。
首先安装mac操作系统(OS)命令行工具:
xcode-select --install
安装在mac操作系统(OS)上适用的Homebrew包管理器。
安装LLVM OpenMP库:
brew install libomp
设置以下环境变量:
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp"
export CFLAGS="$CFLAGS -I/usr/local/opt/libomp/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/opt/libomp/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp"
最后,以详细模式构建scikit-learn(以详细模式构建scikit-learn是为了检查-fopenmp
编译器命令标志是否存在 ):
make clean
pip install --verbose --editable .
Linux
系统的Linux编译器
在不使用conda的情况下,从源代码安装scikit-learn要求您已安装scikit-learn的Python开发头文件(development headers)和具有OpenMP支持的C / C ++编译器(通常为GCC工具链)。
为基于Debian的操作系统(例如Ubuntu)安装依赖:
sudo apt-get install build-essential python3-dev python3-pip
然后运行:
pip3 install cython
pip3 install --verbose --editable .
Cython和预编译wheels运行时所需要的依赖(numpy,scipy和joblib)应自动安装在$HOME/.local/lib/pythonX.Y/site-packages
中 。或者,您可以从virtualenv或conda环境中运行上述命令,来从系统打包程序(system packager)安装的Python包中获得一个全新的独立环境。当使用独立环境时,在上述命令中的pip3
应替换为pip
。
如果您的体系结构(例如ARM)无法使用预编译wheels所需的运行时依赖的话,可以安装系统版本:
sudo apt-get install cython3 python3-numpy python3-scipy
在Red Hat和克隆(例如CentOS)上,使用以下命令安装依赖:
sudo yum -y install gcc gcc-c++ python3-devel numpy scipy
来自conda-forge的Linux编译器
您可以使用conda在用户文件夹中安装GNU的C编译器工具链(GCC)的最新版本。
conda create -n sklearn-dev numpy scipy joblib cython conda-forge::compilers
conda activate sklearn-dev
pip install --verbose --editable .
FreeBSD
FreeBSD的12.0和11.2系统中的clang编译器不包含OpenMP支持。您需要从软件包(或端口)安装openmp
库:
sudo pkg install openmp
这将在/usr/local/include
中安装头文件,在/usr/local/lib
中安装所需要的依赖库。由于默认情况下不会搜索到这些目录,因此可以把以下路径配置在环境变量中:
export CFLAGS="$CFLAGS -I/usr/local/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lomp"
最后,使用标准命令构建软件包:
pip install --verbose --editable .
对于即将发布的FreeBSD 12.1和11.3版本来说,由于系统中包含OpenMP支持,所以不需要这些步骤。
©2007-2019,scikit-learn开发人员(BSD许可证)。 显示此页面源码